package com.quyunshuo.module.home.util

import androidx.lifecycle.ProcessLifecycleOwner
import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch

//它提供了一个特殊的 LifecycleOwner，这个 Owner 代表的不是某个 Activity 或 Fragment 的生命周期，而是整个应用程序进程的生命周期。
//“延迟初始化一个名为 appLifecycleScope的协程作用域，这个作用域与整个应用程序进程的生命周期绑定。在这个作用域里启动的任何协程，都会在应用退出到后台时被自动取消，从而避免在后台执行不必要的操作，节省资源和电量。”
val appLifecycleScope by lazy {
    ProcessLifecycleOwner.get().lifecycleScope
}
//简单来说，这行代码为你提供了一个非常方便的工具，可以安全、高效地管理在整个应用生命周期内运行的后台任务。

// GlobalScope整个进程永远不会自动取消强烈不建议使用，容易导致内存泄漏和资源浪费
//appLifecycleScope整个应用进程应用进入后台 (ON_STOP)应用级别的后台任务：轮询、长连接、传感器监听

//viewModelScopeViewModelViewModel 被清除时界面相关的数据准备：从数据库或网络获取数据以显示在UI上
//​lifecycleScope​​​​Activity / Fragment​​Activity/Fragment 被销毁时​​UI操作​​：动画、更新某个特定的UI组件

//CoroutineScope().launch { }??? 必须手动取消​​ 反模式！危险！极易导致内存泄漏和资源浪费。​​,上面的都是自动取消的。
//ProcessLifecycleOwner.get().lifecycleScope的设计初衷就是为了​​节能​​，它​​一定会​​在应用进入后台时取消其内部的协程。这正是它与手动 CoroutineScope()的根本区别。